package com.neoCalf.neoFriend.service;

import com.neoCalf.neoCommon.entity.UserContact;
import com.neoCalf.neoCommon.entity.UserContactApply;
import com.neoCalf.neoCommon.enums.UserContactTypeEnum;
import com.neoCalf.neoCommon.model.dto.AddGroupUserDto;
import com.neoCalf.neoCommon.model.dto.RemoveGroupUserDto;
import com.neoCalf.neoCommon.model.dto.SearchContactResultDto;
import com.neoCalf.neoCommon.model.dto.UserInfoDto;

import java.util.List;


public interface ContactService {
    /**
     * 添加联系人
     */
    void addRobotContact(UserContact userContact);

    /**
     * 查询联系人列表
     */
    List<UserContact> selectContactList(String userId);

    /**
     * 查询好友申请列表
     */
    List<UserContactApply> selectUserContactApplyList(String userId);

    /**
     * 查询会话
     *
     * @param userId
     * @param contactId
     * @return
     */
    UserContact findUserContact(String userId, String contactId);

    /**
     * 查询联系人列表by type
     */
    List<UserContact> findUserContactByType(String userId, Integer contactType);

    /**
     * 查询我的联系人数量
     */
    Long findMyContactCount(String userId, Integer[] typeList);

    /**
     * 查询群成员数量
     */
    Long findGroupMemberCount(String groupId);

    /**
     * 查询群成员
     */
    List<UserContact> findGroupMember(String groupId);

    /**
     * 加载联系人
     */
    List<UserContact> loadContact(String userId, UserContactTypeEnum typeEnum);

    /**
     * 加入黑名单
     */
    void addContact2BlackList(String userId, String contactId);

    /**
     * 移出黑名单
     */
    void removeContact2BlackList(String userId, String contactId);

    /**
     * 删除联系人
     */
    void delContact(String userId, String contactId);

    /**
     * 联系人信息
     */
    UserInfoDto contactInfo(String userId, String contactId);

    /**
     * 搜索联系人
     */
    SearchContactResultDto search(String userId, String contactId);

    /**
     * 加载联系人申请
     */
    List<UserContactApply> loadContactApply(String userId);

    /**
     * 添加群聊创建者
     */
    void addGroupContact(UserContact userContact);

    /**
     * 申请添加好友
     */
    Integer applyAddContact(String userId, String nickName, String contactId, String applyInfo);

    /**
     * 处理好友申请
     */
    void dealWithApply(String userId, String nickName, Integer applyId, Integer status);

    /**
     * 添加群联系人
     */
    List<UserContact> addGroupUser(String userId, AddGroupUserDto addGroupUserDto);

    /**
     * 移除群联系人
     */
    void removeGroupUser(String userId, RemoveGroupUserDto groupUserDto);
}
